____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―
Annotation (Java)
part 4/5 Β· 14.5 KB total
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Verwendung eigener Annotationen
Eine Annotation ohne Methoden, wie @Vorlaeufig, kann z. B. einer Klasse vorangestellt werden:
@Vorlaeufig
class Klasse {
void methode();
}
Einer Annotation mit nur einer Methode mit dem Namen value muss in Klammern ein konstanter Wert vom Ergebnistyp dieser Methode mit angegeben werden:
@Test(true)
public void methode() { ... }
Wenn der Ergebnistyp ein Array ist, soll ein Arrayliteral verwendet werden:
@Autoren({"Solymosi", "Grude"})
String buch = "Algorithmen und Datenstrukturen mit Java"
Wenn das Array keine Elemente enthΓ€lt, muss ({}) mit angegeben werden. Wenn das Array jedoch nur ein Element enthΓ€lt, kΓΆnnen die geschweiften Klammern weggelassen werden:
@Autoren("Solymosi")
String anderesBuch = "Programmieren in Scala"
Einer Annotation mit mehreren Methoden muss jeder ihrer Methoden in Klammern ein konstanter Wert zugewiesen werden:
@Person(name = "Andreas Solymosi", alter = 56)
Konto konto = new Konto();
Die MΓΆglichkeit, den Wert mit dem Namen anzugeben, besteht auch fΓΌr Annotationen mit einer Methode (ist allerdings ΓΌberflΓΌssig, dient hΓΆchstens der Lesbarkeit):
@Test(value = true)
Eine komplexe (geschachtelte) Annotation muss geschachtelt angewendet werden:
@Kunden(@Person(name = "Andreas Solymosi", alter = 56))
class Unternehmen { β¦ }
In der Vereinbarung der Annotation kΓΆnnen fΓΌr die Methoden Standardwerte definiert werden; dann kann der entsprechende Wert bei der Verwendung weggelassen werden. Da Annotationen Schnittstellen sind, kΓΆnnen sie selber mit Annotationen markiert werden:
@Autoren("Solymosi")
public @interface Test {
boolean wert() default false; // muss nicht unbedingt wert heiΓen
}
Auswertung von Annotationen
Wenn die Annotationen mit dem Bytecode der Klasse geladen werden, kΓΆnnen sie mit Hilfe von Reflexion ausgewertet werden. Beispielsweise kann man feststellen, ob eine Annotation angegeben wurde oder nicht:
boolean istVorlaeufig = Klasse.class.isAnnotationPresent(Vorlaeufig.class);
Wenn man festgestellt hat, dass die Annotation vorhanden ist, dann kann man auch ihren Wert lesen, z. B. ob die Methode noch im Testzustand ist oder nicht:
Test test = Klasse.class.getMethod("methode", new Class[]{}).getAnnotation(Test.class).value();
Wenn hierbei die Annotation nicht vorhanden ist, wird von getAnnotation() die Ausnahme NullPointerException ausgelΓΆst. Aus einer komplexen Annotation mΓΌssen ihre Elemente einzeln selektiert werden:
Person kunden = Unternehmen.class.getAnnotation(Kunden.class).value()[0];
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ